﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;

namespace Storm.Docking.Visual.Drawing
{
    /// <summary>
    /// Represents a library of the colors we use when drawing
    /// our classes in our DockPane.
    /// </summary>
    public class DockColorTable
    {
        #region Properties

        #region DockPane

        public virtual Color PaneBackColor
        {
            get { return Color.FromArgb(33, 33, 70); }
        }

        public virtual Font PaneFont
        {
            get { return new Font("Segoe UI", 8f); }
        }

		public virtual int PaneDockRectangleOpacity
		{
			get { return 30; }
		}

        public virtual Color PaneDockRectangleColor
        {
            get { return Color.DodgerBlue; }
        }

		public virtual Color PaneTabbedDocumentBackColor
		{
			get { return PaneBackColor; }
		}

		public virtual Color PaneTabSelectedStartColor
		{
			get { return CaptionFocusColorStart; }
		}

		public virtual Color PaneTabSelectedEndColor
		{
			get { return CaptionFocusColorEnd; }
		}

		public virtual Color PaneTabSelectedBorderColor
		{
			get { return PaneTabSelectedEndColor; }
		}

		public virtual Color PaneTabNormalStartColor
		{
			get { return Color.Transparent; }
		}

		public virtual Color PaneTabNormalEndColor
		{
			get { return Color.Transparent; }
		}

		public virtual Color PaneTabNormalBorderColor
		{
			get { return PaneTabNormalEndColor; }
		}

		public virtual Color PaneTabSelectedForeColor
		{
			get { return Color.Black; }
		}

		public virtual Color PaneTabNormalForeColor
		{
			get { return SystemColors.Window; }
		}

        #endregion

        #region DockPanel

        public virtual Color PanelBackColor
        {
            get { return Color.Transparent; }
        }

        #endregion

        #region DockCaption

        public virtual Color CaptionFocusColorStart
        {
            get { return Color.FromArgb(255, 255, 222); }
        }

        public virtual Color CaptionFocusColorEnd
        {
            get { return Color.FromArgb(255, 224, 142); }
        }

        public virtual Color CaptionNormalColorStart
        {
            get { return Color.FromArgb(53, 53, 70); }
        }

        public virtual Color CaptionNormalColorEnd
        {
            get { return Color.FromArgb(33, 33, 70); }
        }

        public virtual Color CaptionFocusTextForeColor
        {
            get { return Color.Black; }
        }

        public virtual Color CaptionNormalTextForeColor
        {
            get { return Color.White; }
        }

        public virtual Color CaptionBorderColor
        {
            get { return Color.Transparent; }
        }

        public virtual float CaptionRadius
        {
            get { return 1f; }
        }

        #endregion

        #region DockTab

        public virtual Color TabFocusBackColorStart
        {
            get { return SystemColors.Window; }
        }

        public virtual Color TabFocusBackColorEnd
        {
			get { return SystemColors.Window; }
        }

        public virtual Color TabNormalBackColorStart
        {
            get { return Color.Transparent; }
        }

        public virtual Color TabNormalBackColorEnd
        {
            get { return Color.Transparent; }
        }

        public virtual Color TabFocusBorderColor
        {
            get { return SystemColors.Window; }
        }

        public virtual Color TabNormalBorderColor
        {
            get { return Color.Transparent; }
        }

        public virtual Color TabHoverBackColorStart
        {
            get { return Color.FromArgb(75, 179, 191, 229); }
        }

        public virtual Color TabHoverBackColorEnd
        {
            get { return Color.FromArgb(75, 71, 80, 111); }
        }

        public virtual Color TabHoverBorderColor
        {
            get { return Color.FromArgb(167, 122, 119, 119); }
        }

        public virtual Color TabFocusForeColor
        {
            get { return Color.Black; }
        }

        public virtual Color TabNormalForeColor
        {
            get { return Color.White; }
        }

        public virtual Color TabHoverForeColor
        {
            get { return TabNormalForeColor; }
        }

		public virtual Color TabBodyBackColor
		{
			get { return Color.Transparent; }
		}

        public virtual float TabRadius
        {
            get { return 2; }
        }

        #endregion

        #region Glyph

        public virtual Color GlyphHoverFillColorStart
        {
			get { return Color.FromArgb(255, 255, 255); }
        }

        public virtual Color GlyphHoverFillColorEnd
        {
			get { return Color.FromArgb(255, 255, 255); }
        }

        public virtual Color GlyphNormalFillColorStart
        {
			get { return Color.FromArgb(50, 255, 255, 255); }
        }

        public virtual Color GlyphNormalFillColorEnd
        {
			get { return Color.FromArgb(50, 255, 255, 255); }
        }

        public virtual Color GlyphPressedFillColorStart
        {
            get { return Color.FromArgb(248, 181, 106); }
        }

        public virtual Color GlyphPressedFillColorEnd
        {
            get { return Color.FromArgb(255, 208, 134); }
        }

        public virtual Color GlyphHoverBorderColor
        {
			get { return Color.FromArgb(248, 187, 94); }
        }

        public virtual Color GlyphNormalBorderColor
        {
			get { return CaptionFocusColorStart; }
        }

        public virtual Color GlyphPressedBorderColor
        {
			get { return CaptionFocusColorStart; }
        }

        #endregion

        #region CloseGlyph

        public virtual Image CloseGlyphFocusImage
        {
            get
            {
                return global::Storm.Docking.Properties
                    .Resources.DockCaptionCloseGlyph;
            }
        }

        public virtual Image CloseGlyphNormalImage
        {
            get
            {
                return global::Storm.Docking.Properties
                    .Resources.DockCaptionCloseGlyphInverted;
            }
        }

        #endregion

        #region OptionsGlyph

        public virtual Image OptionsGlyphFocusImage
        {
            get
            {
                return global::Storm.Docking.Properties
                    .Resources.DockCaptionOptionsGlyph;
            }
        }

        public virtual Image OptionsGlyphNormalImage
        {
            get
            {
                return global::Storm.Docking.Properties
                    .Resources.DockCaptionOptionsGlyphInverted;
            }
        }

        #endregion

        #region DockForm

        public virtual Color FormBodyColor
        {
            get { return Color.FromArgb(23, 23, 60); }
        }

        public virtual Color FormBorderColor
        {
            get { return Color.FromArgb(13, 13, 50); }
        }

        public virtual int FormRadius
        {
            get { return 5; }
        }

        #endregion

        #endregion

		/// <summary>
		/// Initializes a new instance of the <see cref="DockColorTable"/> class.
		/// </summary>
		public DockColorTable()
		{
		}
    }
}
